Computer systems typically comprise a combination of computer programs and hardware, such as semiconductors, transistors, chips, and circuit boards. The hardware within a computer system is typically organized into components, such as processors, storage devices, and I/O (Input/Output) devices. These components typically communicate with each other via another component called a bus.
Buses can be parallel buses, which carry data words or multiple bits in parallel on multiple wires, or serial buses, which carry data in bit-serial form. A bus can be point-to-point, meaning that the bus connects only two components, or multi-drop, meaning that more than two components are connected to the bus. In a multi-drop bus, typically the bus has both data and address wires, and components connected to the bus listen for their unique destination address on the address wires, in order to discern whether data on the data wires is intended for them.
One example of a computer bus is called PCI EXPRESS (PERIPHERAL COMPONENT INTERCONNECT EXPRESS), which uses a network of point-to-point serial links. PCI EXPRESS devices communicate via a logical connection called an interconnect or link. A link is a point-to-point communication channel between two PCI EXPRESS ports, allowing both to send/receive ordinary PCI-requests (e.g., configuration read/writes, I/O read/writes, and memory read/writes) and interrupts.
One way of accessing memory via an I/O bus is via a technique called memory-mapped I/O (MMIO), in which a processor maps addresses in an I/O device into the processor's address space in memory. Areas of the processor's addressable space in memory are reserved for I/O to/from I/O devices. This reservation may be either temporary or permanent. Each I/O device monitors the bus and responds to any processor's read/write from/to the device-assigned address space in memory. Thus, if the processor issues a read instruction to the device-assigned address space in memory, the I/O device receives the instruction from the bus and transmits the data (onto the bus) that is located at the corresponding address within the I/O device. Similarly, if the processor issues a write instruction to the device-assigned address space in memory, the I/O device receives the data from the bus and writes it to the corresponding address within the I/O device. In some MMIO schemes, the processor instructions that read/write from/to the device-assigned address space in memory are the same instructions that read/write from/to memory in address spaces that are not reserved for I/O devices. In other MMIO schemes, the processor instructions that read/write from/to the device-assigned address space in memory are different instructions from those that read/write from/to memory in address spaces that are not reserved for I/O devices.